library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.1 ──
✓ ggplot2 3.3.5     ✓ purrr   0.3.4
✓ tibble  3.1.6     ✓ dplyr   1.0.6
✓ tidyr   1.1.3     ✓ stringr 1.4.0
✓ readr   1.4.0     ✓ forcats 0.5.1
── Conflicts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(plotly)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
library(rcartocolor)
library(ggiraph)
merged <- read_tsv('../output/merged_table.tsv')

── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
cols(
  Specialty = col_character(),
  `No. of Programs` = col_double(),
  `Positions Offered` = col_number(),
  `Unfilled Programs` = col_double(),
  `MD Senior Applicants` = col_number(),
  `Total Applicants` = col_number(),
  `MD Senior Matches` = col_number(),
  `Total Matches` = col_number(),
  `MD Senior % Filled` = col_double(),
  `Total % Filled` = col_double(),
  `MD Senior Ranked Positions` = col_number(),
  `Total Ranked Positions` = col_character(),
  Year = col_double(),
  Class = col_character()
)
long_table_absolute <- read_tsv('../output/long_table_absolute.tsv')

── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
cols(
  Specialty = col_character(),
  Year = col_double(),
  Class = col_character(),
  Name = col_character(),
  Value = col_number()
)
long_table_percent <- read_tsv('../output/long_table_percent.tsv')

── Column specification ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
cols(
  Specialty = col_character(),
  Year = col_double(),
  Class = col_character(),
  Name = col_character(),
  Value = col_double()
)
merged %>% 
  filter(Specialty == 'Dermatology') 
p <- long_table_absolute %>% 
  filter(Specialty == 'Dermatology', Class == 'PGY2') %>% 
  ggplot(aes(x = Year,
             y = Value,
             color = Name)) +
  geom_point() +
  geom_line() + 
  facet_wrap(~Specialty + Class, scales = 'free_y') +
  theme_bw() +
  scale_color_carto_d(palette = 'Bold') 

p

input <- 'Dermatology'
plot_data <- merged %>% filter(Specialty == input,
                                Class == 'PGY2')#long_table_absolute %>% filter(Specialty == 'Dermatology')

fig <- plot_ly(plot_data, x = ~Year)
fig <- fig %>% add_trace(y = ~`Positions Offered`, name = 'Positions Offered', mode = 'lines+markers')
fig <- fig %>% add_trace(y = ~`MD Senior Applicants`, name = 'MD Senior Applicants', mode = 'lines+markers')
fig <- fig %>% add_trace(y = ~`Total Applicants`, name = 'Total Applicants', mode = 'lines+markers')

fig %>%
  layout(                        # all of layout's properties: /r/reference/#layout
    title = input, # layout's title: /r/reference/#layout-title
    xaxis = list(           # layout's xaxis is a named list. List of valid keys: /r/reference/#layout-xaxis
      title = "Time",      # xaxis's title: /r/reference/#layout-xaxis-title
      showgrid = F),       # xaxis's showgrid: /r/reference/#layout-xaxis-showgrid
    yaxis = list(           # layout's yaxis is a named list. List of valid keys: /r/reference/#layout-yaxis
      title = "uidx")     # yaxis's title: /r/reference/#layout-yaxis-title
  )
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
p <- long_table_absolute %>% 
  filter(Specialty == 'Dermatology', Class == 'PGY2') %>% 
  ggplot(aes(x = Year,
             y = Value,
             color = Name,
             data_id = Name,
             tooltip = Value)) +
  geom_point_interactive() +
  geom_line() + 
  theme_bw() +
  scale_color_carto_d(palette = 'Bold') 

girafe(ggobj = p)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkocmNhcnRvY29sb3IpCmxpYnJhcnkoZ2dpcmFwaCkKYGBgCgpgYGB7cn0KbWVyZ2VkIDwtIHJlYWRfdHN2KCcuLi9vdXRwdXQvbWVyZ2VkX3RhYmxlLnRzdicpCmxvbmdfdGFibGVfYWJzb2x1dGUgPC0gcmVhZF90c3YoJy4uL291dHB1dC9sb25nX3RhYmxlX2Fic29sdXRlLnRzdicpCmxvbmdfdGFibGVfcGVyY2VudCA8LSByZWFkX3RzdignLi4vb3V0cHV0L2xvbmdfdGFibGVfcGVyY2VudC50c3YnKQpgYGAKCmBgYHtyfQptZXJnZWQgJT4lIAogIGZpbHRlcihTcGVjaWFsdHkgPT0gJ0Rlcm1hdG9sb2d5JykgCmBgYAoKYGBge3J9CnAgPC0gbG9uZ190YWJsZV9hYnNvbHV0ZSAlPiUgCiAgZmlsdGVyKFNwZWNpYWx0eSA9PSAnRGVybWF0b2xvZ3knLCBDbGFzcyA9PSAnUEdZMicpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBZZWFyLAogICAgICAgICAgICAgeSA9IFZhbHVlLAogICAgICAgICAgICAgY29sb3IgPSBOYW1lKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKyAKICBmYWNldF93cmFwKH5TcGVjaWFsdHkgKyBDbGFzcywgc2NhbGVzID0gJ2ZyZWVfeScpICsKICB0aGVtZV9idygpICsKICBzY2FsZV9jb2xvcl9jYXJ0b19kKHBhbGV0dGUgPSAnQm9sZCcpIAoKcApgYGAKCmBgYHtyfQppbnB1dCA8LSAnRGVybWF0b2xvZ3knCnBsb3RfZGF0YSA8LSBtZXJnZWQgJT4lIGZpbHRlcihTcGVjaWFsdHkgPT0gaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT0gJ1BHWTInKSNsb25nX3RhYmxlX2Fic29sdXRlICU+JSBmaWx0ZXIoU3BlY2lhbHR5ID09ICdEZXJtYXRvbG9neScpCgpmaWcgPC0gcGxvdF9seShwbG90X2RhdGEsIHggPSB+WWVhcikKZmlnIDwtIGZpZyAlPiUgYWRkX3RyYWNlKHkgPSB+YFBvc2l0aW9ucyBPZmZlcmVkYCwgbmFtZSA9ICdQb3NpdGlvbnMgT2ZmZXJlZCcsIG1vZGUgPSAnbGluZXMrbWFya2VycycpCmZpZyA8LSBmaWcgJT4lIGFkZF90cmFjZSh5ID0gfmBNRCBTZW5pb3IgQXBwbGljYW50c2AsIG5hbWUgPSAnTUQgU2VuaW9yIEFwcGxpY2FudHMnLCBtb2RlID0gJ2xpbmVzK21hcmtlcnMnKQpmaWcgPC0gZmlnICU+JSBhZGRfdHJhY2UoeSA9IH5gVG90YWwgQXBwbGljYW50c2AsIG5hbWUgPSAnVG90YWwgQXBwbGljYW50cycsIG1vZGUgPSAnbGluZXMrbWFya2VycycpCgpmaWcgJT4lCiAgbGF5b3V0KCAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsIG9mIGxheW91dCdzIHByb3BlcnRpZXM6IC9yL3JlZmVyZW5jZS8jbGF5b3V0CiAgICB0aXRsZSA9IGlucHV0LCAjIGxheW91dCdzIHRpdGxlOiAvci9yZWZlcmVuY2UvI2xheW91dC10aXRsZQogICAgeGF4aXMgPSBsaXN0KCAgICAgICAgICAgIyBsYXlvdXQncyB4YXhpcyBpcyBhIG5hbWVkIGxpc3QuIExpc3Qgb2YgdmFsaWQga2V5czogL3IvcmVmZXJlbmNlLyNsYXlvdXQteGF4aXMKICAgICAgdGl0bGUgPSAiVGltZSIsICAgICAgIyB4YXhpcydzIHRpdGxlOiAvci9yZWZlcmVuY2UvI2xheW91dC14YXhpcy10aXRsZQogICAgICBzaG93Z3JpZCA9IEYpLCAgICAgICAjIHhheGlzJ3Mgc2hvd2dyaWQ6IC9yL3JlZmVyZW5jZS8jbGF5b3V0LXhheGlzLXNob3dncmlkCiAgICB5YXhpcyA9IGxpc3QoICAgICAgICAgICAjIGxheW91dCdzIHlheGlzIGlzIGEgbmFtZWQgbGlzdC4gTGlzdCBvZiB2YWxpZCBrZXlzOiAvci9yZWZlcmVuY2UvI2xheW91dC15YXhpcwogICAgICB0aXRsZSA9ICJ1aWR4IikgICAgICMgeWF4aXMncyB0aXRsZTogL3IvcmVmZXJlbmNlLyNsYXlvdXQteWF4aXMtdGl0bGUKICApCmBgYApgYGB7cn0KcCA8LSBsb25nX3RhYmxlX2Fic29sdXRlICU+JSAKICBmaWx0ZXIoU3BlY2lhbHR5ID09ICdEZXJtYXRvbG9neScsIENsYXNzID09ICdQR1kyJykgJT4lIAogIGdncGxvdChhZXMoeCA9IFllYXIsCiAgICAgICAgICAgICB5ID0gVmFsdWUsCiAgICAgICAgICAgICBjb2xvciA9IE5hbWUsCiAgICAgICAgICAgICBkYXRhX2lkID0gTmFtZSwKICAgICAgICAgICAgIHRvb2x0aXAgPSBWYWx1ZSkpICsKICBnZW9tX3BvaW50X2ludGVyYWN0aXZlKCkgKwogIGdlb21fbGluZSgpICsgCiAgdGhlbWVfYncoKSArCiAgc2NhbGVfY29sb3JfY2FydG9fZChwYWxldHRlID0gJ0JvbGQnKSAKCmdpcmFmZShnZ29iaiA9IHApCmBgYAo=